package com.listdemo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListDemo3 {
    public static void main(String[] args) {
        /*
        List系列集合的五种遍历方式:
            1.迭代器
            2.列表迭代器
            3.增强for
            4.Lambda表达式
            5.普通for循环

        在遍历的过程中需要删除元素，请使用迭代器。
        在遍历的过程中需要添加元素，请使用列表迭代器。
        仅仅想遍历，那么使用增强for或Lambda表达式。
        如果遍历的时候想操作索引，可以用普通for。
         */

        //1.创建集合并添加数据
        List<String> list=new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        //2.迭代器遍历
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String str = iterator.next();
            System.out.println(str);
        }
        System.out.println("=========");

        //3.增强for遍历
        //下面的变量s，其实就是一个第三方的变量而已。
        //在循环的过程中，依次表示集合中的每一个元素
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("=========");

        //4.Lambda表达式遍历
        list.forEach(s ->System.out.println(s));
        System.out.println("=========");

        //5.普通for循环遍历
        //size方法跟get方法还有循环结合的方式，利用索引获取到集合中的每一个元素
        for (int i = 0; i < list.size(); i++) {
            //i:依次表示集合中的每一个索引
            String s = list.get(i);
            System.out.println(s);
        }
        System.out.println("=========");

        //6.列表迭代器遍历
        //获取一个列表迭代器的对象，里面的指针默认也是指向0索引的
        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()){
            String str = listIterator.next();
            if("bbb".equals(str)){
                listIterator.add("qqq");
            }
            System.out.println(str);
        }
        System.out.println(list);
    }
}
